package com.bingqing.service;

import cn.hutool.captcha.CaptchaUtil;
import com.bingqing.common.CaptureConfig;
import com.bingqing.common.Result;
import com.bingqing.dao.AdminDao;
import com.bingqing.entity.Admin;
import com.bingqing.entity.Params;
import com.bingqing.exception.CustomException;
import com.bingqing.utils.JwtTokenUtils;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

/**
 * ClassName: AdminService
 * Package: com.bingqing.springboot.service
 * Description:
 *
 * @Author liuyujie
 * @Create 2024-03-06 13:46
 * @Version 1.0
 */
@Service
public class AdminService {
    @Resource
    AdminDao adminDao;


    //分页查询
    public PageInfo<Admin> findBySearch(Params params) {

    //开启分页查询
        PageHelper.startPage(params.getPageNum(),params.getPageSize());
        List<Admin> list = adminDao.findBySearch(params);
        return PageInfo.of(list);

    }

    public void add(Admin admin) {
        //1.判断用户名是否为空
        if(admin.getName() == null || "".equals(admin.getName())){
            throw new CustomException("用户名不能为空！");
        }
        //2.判断用户名是否存在
        Admin dbAdmin = adminDao.findByName(admin.getName());
        if(dbAdmin != null){
            throw new CustomException("用户名已存在，请重写输入！");
        }
        //3.初始化一个密码，并插入数据库
        if(admin.getPassword() == null){
            admin.setPassword("123456");
        }
        adminDao.insertSelective(admin);

    }

    /*
    * 更新admin
    * updateByPrimaryKeySelective ：根据主键只更新属性不为null的值
    * updateByPrimaryKey: 根据主键更新全部字段，为空的字段更新为null
    * */
    public void update(Admin admin) {
        adminDao.updateByPrimaryKeySelective(admin);
    }

    public void deleteById(Integer id) {
        adminDao.deleteByPrimaryKey(id);
    }
    /*
    * 登录
    * */
    public Admin login(Admin admin) {
        // 1. 进行一些非空判断
        if (admin.getName() == null || "".equals(admin.getName())) {
            throw new CustomException("用户名不能为空");
        }
        if (admin.getPassword() == null || "".equals(admin.getPassword())) {
            throw new CustomException("密码不能为空");
        }
        // 2. 从数据库里面根据这个用户名和密码去查询对应的管理员信息，
        Admin user = adminDao.findByNameAndPassword(admin.getName(), admin.getPassword());
        if (user == null) {
            // 如果查出来没有，那说明输入的用户名或者密码有误，提示用户，不允许登录
            throw new CustomException("用户名或密码输入错误");
        }
        // 如果查出来了有，那说明确实有这个管理员，而且输入的用户名和密码都对；
        // 生成token并返回给前端
        String token = JwtTokenUtils.genToken(user.getId().toString(),user.getPassword());
        user.setToken(token);
        return user;
    }

    public Admin findById(Integer id) {
        Admin admin = adminDao.selectByPrimaryKey(id);
        return admin;
    }
}
